/**
 * Framework Tec - Interface Bus
 *
 * @author Abdessamad HAILASS
 * @since 2011
 **/

package tec;

class TestAutobus {
   public static void lancer () {
      System.out.print ("Tests Autobus ");
		
      testInstanciation ();
      System.out.print (".");
      
      testAllerArretSuivant ();
   	  System.out.print (".");
   
      testDemanderPlaceAssise ();
   	  System.out.print (".");
       
      testDemanderPlaceDebout ();
   	  System.out.print (".");
      
      testDemanderChangerEnAssis ();
   	  System.out.print (".");
       
      testDemanderChangerEnDebout ();
   	  System.out.print ("."); 
       
      testDemanderSortie ();
   	  System.out.print (".");
      
      testAjouterPassager ();
	  System.out.print (".");
      
	  System.out.print (" [OK]\n");
   }
   
  private static void testInstanciation () {
      Bus bus1 = new Autobus (20, 23);
      assert bus1.aPlaceAssise ();
      assert bus1.aPlaceDebout ();
      
      Bus bus2 = new Autobus (0, 43);
      assert ! bus2.aPlaceAssise ();
      assert   bus2.aPlaceDebout ();
      
      Bus bus3 = new Autobus (50, 0);
      assert   bus3.aPlaceAssise ();
      assert ! bus3.aPlaceDebout ();
   }
   
   private static void testAllerArretSuivant () {
      Bus bus = new Autobus (1, 1);
      FauxPassager passager = new FauxPassager (1);
	  bus.demanderPlaceAssise (passager);
      bus.allerArretSuivant ();
      // l'objet du test est de savoir si le bus a bel est bien signaler le nouvel arret
      // a ses passager.
      // Aucun changement d'etat particulier n'est a signaler pour le bus.
      // Se referer a testDemanderSortie (), testDemanderChangerEnDebout (),
      // testDemanderChangerAssis ()
   }

   private static void testDemanderPlaceAssise () {
      Bus bus = new Autobus (1, 1);
      FauxPassager passager = new FauxPassager (6);
            
      assert   bus.aPlaceAssise ();
      bus.demanderPlaceAssise (passager);      
      assert ! bus.aPlaceAssise ();
   }
    
   private static void testDemanderPlaceDebout () {
      Bus bus = new Autobus (1, 1);
      FauxPassager passager = new FauxPassager (2);
            
      assert   bus.aPlaceDebout ();      
      bus.demanderPlaceDebout (passager);
      assert ! bus.aPlaceDebout ();
   }

   private static void testDemanderChangerEnAssis () {
      Bus bus = new Autobus (1, 1);
      FauxPassager passager = new FauxPassager (3);
      
      bus.demanderPlaceDebout (passager);      
      bus.demanderChangerEnAssis (passager);
      passager.etat = EtatPassager.Assis ();
      
      assert ! bus.aPlaceAssise ();
      assert   bus.aPlaceDebout ();
   }
    
   private static void testDemanderChangerEnDebout () {
      Bus bus = new Autobus (1, 1);
      FauxPassager passager = new FauxPassager (4);
      
      bus.demanderPlaceAssise (passager);      
      bus.demanderChangerEnDebout (passager);
      passager.etat = EtatPassager.Debout ();
      
      assert   bus.aPlaceAssise ();
      assert ! bus.aPlaceDebout ();
   }

   private static void testDemanderSortie () {
      Bus bus = new Autobus (1, 1);
      FauxPassager assis = new FauxPassager (7);
      FauxPassager debout = new FauxPassager (5);
		
	  bus.demanderPlaceAssise (assis);
	  bus.demanderPlaceDebout (debout);

	  assis.etat = EtatPassager.Assis ();
	  debout.etat = EtatPassager.Debout ();
	  
	  assert ! bus.aPlaceAssise ();
	  assert ! bus.aPlaceDebout ();
	  
	  bus.demanderSortie (assis);
	  assert   bus.aPlaceAssise ();
	  assert ! bus.aPlaceDebout ();
		
	  bus.demanderPlaceAssise (assis);
	  bus.demanderSortie (debout);
		
	  assert ! bus.aPlaceAssise ();
      assert   bus.aPlaceDebout ();
   }

   private static void testAjouterPassager () {
      // todo ...
   }
}

